package com.ruoyi.system.service;

import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

/**
 * 微信支付
 */
public interface WeChatPayService {

    /**
     * H5支付下单
     * @param body 商品简介
     * @param orderNumber 订单号 全局唯一
     * @param money 支付金额 单位分
     * @param ip 用户下单的ip地址
     * @param notifyUrl  回调地址
     * @return  支付的时候 直接调用这个方法。
     * @throws Exception
     */
    public String  wxH5Pay(String body,String orderNumber,int money,String ip,String notifyUrl)throws Exception;

    /**
     * 微信支付回调
     * @param wxPayOrderNotifyResult
     * @return
     * @throws Exception
     */
    public void  wxPayNotify(WxPayOrderNotifyResult wxPayOrderNotifyResult, HttpServletResponse response)throws Exception;

    /**
     *  微信支付退款
     * @param orderNumber
     * @param money
     * @param notifyUrl
     * @return
     */
    String refund(String orderNumber ,Long money,String notifyUrl);

    /**
     * 微信退款回调
     *
     * @param wxPayRefundNotifyResult
     * @param response
     * @return
     */
    String refundCallback(WxPayRefundNotifyResult wxPayRefundNotifyResult, HttpServletResponse response) throws IOException;

    /**
     * 验证回调通知签名
     */
    boolean verifyNotify(String xmlData);

    /**
     * 解析回调通知数据
     */
    Map<String, String> parseNotifyData(String xmlData);

    /**
     * 返回成功响应
     */
    String responseSuccess();

    /**
     * 返回失败响应
     */
    String responseFailure(String message);

    /**
     * 微信小程序支付
     * @param openId 用户openid
     * @param description 商品描述
     * @param orderNumber 订单号
     * @param amount 支付金额
     * @param ip 用户下单的ip地址
     * @param notifyUrl 回调地址
     * @return 支付参数
     */
    Map<String, String> wxMiniPay(String openId, String description, String orderNumber, 
            int amount, String ip, String notifyUrl);
    String getOpenIdByCode(String code);
}
